/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package SocketServer;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Santos
 */
public class ServidorSocketDAO extends AbstractDAO {

    /**
     * O controlador (controller) faz a mediação da entrada, convertendo-a em
     * comandos para o modelo ou visão
     */
    private ResultSet rs;

    @Override
    public void Gravar(String sql) {
        ConnectDataBase();
        InsertUpdateDelete(sql);
    }

    @Override
    public ResultSet Consultar(String sql) {
        ConnectDataBase();
        return Select(sql);
    }

    /**
     * Metodo responsável por montar os scripts de manipulação de dados
     *
     * @param model
     * @return
     */
    public boolean GravarDados(ServidorSocketModel model) {
        String sql = "";
        if ("I".equals(model.getActionScript())) {
            sql = "INSERT INTO \n"
                    + "  `tentativa`\n"
                    + "(\n"
                    + "  `nome_usuario`,\n"
                    + "  `data_tentativa`,\n"
                    + "  `hora_tentativa`,\n"
                    + "  `total_acertos`,\n"
                    + "  `total_erros`) \n"
                    + "VALUE (\n"
                    + "  '" + model.getNomeUsuario() + "',\n"
                    + "  '" + model.getDataInicio() + "',\n"
                    + "  '" + model.getHoraInicio() + "',\n"
                    + "  " + model.getTotalAcertos() + ",\n"
                    + "  " + model.getTotalErros() + ")";
        }
        if (!sql.equals("")) {
            Gravar(sql);
        } else {
            System.out.println("Script quebrado/ou vazio: " + sql);
            return false;
        }
        return true;

    }

    /**
     * Metodo responsável por consultar dados e retorna em formato de lista
     *
     * @return lista do model com os dados
     */
    public List<ServidorSocketModel> ConsultarDados() {
        List<ServidorSocketModel> data = new ArrayList<>();
        try {
            ConnectDataBase();
            String sql = "SELECT \n"
                    + "  `id_tentativa`,\n"
                    + "  `nome_usuario`,\n"
                    + "  `data_tentativa`,\n"
                    + "  `hora_tentativa`,\n"
                    + "  `total_acertos`,\n"
                    + "  `total_erros`\n"
                    + " FROM \n"
                    + "  `tentativa` \n"
                    + " order by  `total_acertos` desc ,  `total_erros` ";
            rs = Consultar(sql);

            while (rs.next()) {
                ServidorSocketModel p = new ServidorSocketModel();
                p.setIdTentativa(rs.getInt("id_tentativa"));
                p.setNomeUsuario(rs.getString("nome_usuario"));
                p.setDataInicio(rs.getString("data_tentativa"));
                p.setHoraInicio(rs.getString("hora_tentativa"));
                p.setTotalAcertos(rs.getInt("total_acertos"));
                p.setTotalErros(rs.getInt("total_erros"));
                data.add(p);
            }
        } catch (SQLException ex) {
            ex.getStackTrace();
        }
        return data;
    }

}
